package modelo.diagrama.de.classes;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import modelo.diagramas.ElementoDeLigacao;
import modelo.diagramas.ElementoDeModelo;
import modelo.diagramas.ObjetoBase;

public class Associacao extends ElementoDeLigacao {


	public Associacao(ElementoDeModelo origem,
			ElementoDeModelo destino,Color corContorno, int espessuraLinha, String rotuloRelacionamento) {
		super( origem, destino, corContorno, espessuraLinha, rotuloRelacionamento);
		this.setAltura(destino.getY() - origem.getY());
		this.setLargura(destino.getX() - origem.getX());
	}

	@Override
	public void pinta(Graphics g) {
		
		
		for (int i = 0; i < this.getEspessuraLinha(); i++) {

			if (this.getOrientacao().equals(ORIENTACAO_BAIXO_DIREITA)) {

				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura()), (this.getOrigem().getY() + this
						.getOrigem().getAltura() / 2) + i, (this.getDestino()
						.getX() + this.getDestino().getLargura() / 2), (this
						.getOrigem().getY() + this.getOrigem().getAltura() / 2)
						+ i);
				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) + i, this.getOrigem().getY()
						+ this.getOrigem().getAltura() / 2, this.getDestino()
						.getX() + this.getDestino().getLargura() / 2 + i, this
						.getDestino().getY());

			} else if (this.getOrientacao().equals(ORIENTACAO_CIMA_DIREITA)) {

				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura()), (this.getOrigem().getY() + this
						.getOrigem().getAltura() / 2) + i, (this.getDestino()
						.getX() + this.getDestino().getLargura() / 2), (this
						.getOrigem().getY() + this.getOrigem().getAltura() / 2)
						+ i);
				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) + i, this.getOrigem().getY()
						+ this.getOrigem().getAltura() / 2, this.getDestino()
						.getX() + this.getDestino().getLargura() / 2 + i, this
						.getDestino().getY() + this.getDestino().getAltura());

			} else if (this.getOrientacao().equals(ORIENTACAO_BAIXO_ESQUERDA)) {

				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura()), (this.getDestino().getY() + this
						.getDestino().getAltura() / 2) + i, (this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2),
						(this.getDestino().getY() + this.getDestino()
								.getAltura() / 2) + i);
				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura() / 2) + i, this.getDestino().getY()
						+ this.getDestino().getAltura() / 2, this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2 + i, this
						.getOrigem().getY() + this.getOrigem().getAltura());

			} else if (this.getOrientacao().equals(ORIENTACAO_CIMA_ESQUERDA)) {

				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura()), (this.getDestino().getY() + this
						.getDestino().getAltura() / 2) + i, (this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2),
						(this.getDestino().getY() + this.getDestino()
								.getAltura() / 2) + i);
				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura() / 2) + i, this.getDestino().getY()
						+ this.getDestino().getAltura() / 2, this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2 + i, this
						.getOrigem().getY());

			}else if(this.getOrigem().equals(this.getDestino())){
				// Autorelacionamento
				g.drawLine(this.getOrigem().getX()+this.getOrigem().getLargura()-40+i, this.getOrigem().getY(),this.getOrigem().getX()+this.getOrigem().getLargura()-40+i, this.getOrigem().getY()-40 );
				g.drawLine(this.getOrigem().getX()+this.getOrigem().getLargura()-40, this.getOrigem().getY()-40+i, this.getOrigem().getX()+this.getOrigem().getLargura()+80, this.getOrigem().getY()-40 +i );
				g.drawLine(this.getOrigem().getX()+this.getOrigem().getLargura()+80+i, this.getOrigem().getY()-40 , this.getOrigem().getX()+this.getOrigem().getLargura()+80+i,this.getOrigem().getY()+40 );
				g.drawLine(this.getOrigem().getX()+this.getOrigem().getLargura()+80,this.getOrigem().getY()+40+i,this.getOrigem().getX()+this.getOrigem().getLargura(),this.getOrigem().getY()+40+i);
			}
			
			else{
				g.drawLine((this.getDestino().getX() ), (this.getDestino().getY() + this
						.getDestino().getAltura() / 2) + i, (this.getOrigem()
						.getX() + this.getOrigem().getLargura() ),
						(this.getDestino().getY() + this.getDestino()
								.getAltura() / 2) + i);
			}
		}

	}

}
